iT邦幫忙

2022 iThome 鐵人賽

DAY 25
0
Modern Web

想轉職的鯊魚從零基礎開始學習JavaScript系列 第 25

想轉職的鯊魚從零基礎開始學習JavaScript Day-25 Classes 類別(二)

  • 分享至 

  • xImage
  •  

Class static initialization blocks

一個class只有生成新物件的時候,才能訪問其值,

那有沒有不用新建立一個物件就可以直接訪問值的,就像Math的那些常用的常數一樣,

這時就要透過static去處理了,Class static initialization blocks(暫譯:類別的靜態初始化區塊)

這麼說來那些不能用new來建立的objects,就是只有static而沒有constructor,

static意思是靜態,在JavaScipt裡面就是值不會被改變的意思。

在呼叫他的時候,不需要綁定Object,可以透過class做呼叫。

  • Syntax語法
  1. static LeftHandSideExpression

這個一次只能建立一個 static的值,要再建立前宣告static,之後就是用一個變數去乘載一個值。

  static property = 100000;

但是這種方法,一次只能對應一個變數與值,如果要兩個以上就需要再次宣告static,所以如果有兩個以上的狀況就會推薦使用{}(block)。

  1. static { /* … */ }

跟建立constructor的時候一樣,可以用this來建立,只是這時的this就是指class的名稱。
如果不想用this也可以直接使用class的名稱,但是比較少人會這樣做。

extends 延伸

從零開始建立一個新的class是很難的,但是如果是拿現有的class(或是物件)當基底再去做延伸會容易許多,於是就有了一個語法叫做extends,可以在現有class(或是物件)當基底的情況下建立出一個新的class。

  • Syntax語法

class ChildClass(newClassName) extends ParentClass {
class內容。
}

ParentClass當作基底的class(或是物件),通常是class(或是物件)的名稱,但也可以是當場去宣告一個class作為ParentClass,只是鯊魚不建議這麼做,這會讓code看起來很亂。

ChildClass新建立的class,因為是從ParentClass 延伸出來,所以會有child的稱呼。

跟一般的class一樣,要先宣告class,之後是class的名稱,後面再加上extends,之後才會被當作基底的class(或是物件),剩下的{}block,就是專屬於這個class的內容。

而被選作當基底的class(或是物件),本身必須有constructor,才有資格當作ParentClass。

昨天提到的constructor的內容修正

昨天有提到class模組的內部 必須要由constructor來建立,這點鯊魚要做修正,其實可以透過LeftHandSideExpression就可以建立了。

class people {
  property = 200000;
  deposit = 200000;
  mobileWay = "moto"
  realEstate = 0;
}

如果"="等號 右側是一個值,會被成為fields
如果是一個函式,會被稱作methods

而必須要由constructor來建立,則是可以自由設定參數的class。

Public class fields 類別的公開資料

其實這個應該要放在很前面說的,只是鯊魚比較晚看到就比較晚說了,Public是公開的意思,上面說全部都是屬於Public class fields,也就是說他們都是可以當作原型被繼承至新建立的物件中,相對於Public,有一個內容是不會被繼承的就是Private class features,這個不會被繼承也沒辦法輕易地去訪問他,他的相關事情下面我們慢慢的說。

Private class features 類別的隱藏資料

一般class建立出來的屬性都是可以被訪問的,如果想要建立出來的屬性不被訪問,就必須將其轉為Private(私密的),

  • Syntax

    #屬性名稱

在內部的屬性名稱前面加上一個前綴#就行了,不過特別注意, constructors是無法變成private,所以製作class features的時候不要用constructor。

  • 訪問的方法

Private被稱作私人,他的資料是沒辦法輕易地訪問的,但是也不是沒有訪問的方法,必須從class內部去呼叫他,才可以使用被隱藏的內容,也就是Object常出現的getter 和 setter,從class內部去製作一個fuction專門去設置/調用Private內部的值。

結語

看的內容不足,導致鯊魚又誤會了一些東西,希望沒給大家帶來太多的困擾,鯊魚還在學所以還有很多不懂得,可能會搞錯意思,但是鯊魚相信,只要一直往前就會離真理越來越近,不要停下腳步,繼續前進吧。

鯊語錄

資料來源

ECMA-262
MDN-class


上一篇
想轉職的鯊魚從零基礎開始學習JavaScript Day-24 Classes 類別(一)
下一篇
想轉職的鯊魚從零基礎開始學習JavaScript Day-26 RegExp 正規運算式 (一)
系列文
想轉職的鯊魚從零基礎開始學習JavaScript31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言